package com.home.cca.network;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.home.cca.model.Mat;
import com.home.cca.model.Result;

import java.io.IOException;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;

import okhttp3.Request;
import okhttp3.RequestBody;

/**
 * 请求获取所有供应商物料分类树
 */
public class QueryMatRequest {

    private static final String URL = ApiClient.getBaseUrl() + "/SupplierManager/GoodsMgr/GetAllSupMatClsTree";

    /**
     * 发起请求，获取分类树数据
     *
     * @return 分类树结构列表（具体结构需根据实际返回 JSON 定义 MatCls 类）
     * @throws IOException 请求失败或响应异常
     */
    public static List<Mat> query() throws IOException {
        Request request = new Request.Builder()
                .url(URL)
                .post(RequestBody.create("", null)) // 空 body 的 POST
                .header("Accept", "*/*")
                .header("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6")
                .header("Connection", "keep-alive")
                .header("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8") // 可选，服务端可能期望
                .header("Cookie", ApiClient.getCookie()) // 包含 ASP.NET_SessionId 和 .ASPXAUTH
                .header("Origin", ApiClient.getBaseUrl())
                .header("Referer", ApiClient.getBaseUrl() + "/SupplierManager/GoodsMgr") // 推荐设置合理 Referer
                .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0")
                .header("X-Requested-With", "XMLHttpRequest")
                .header("docktoken", "null") // 注意：值是字符串 "null"，不是 null
                // sec-* 头在移动端通常可省略，浏览器环境才严格需要
                .build();

        String responseBody = ApiClient.execute(request);
        Result<Mat> result = new Gson().fromJson(responseBody, new TypeToken<Result<Mat>>() {
        }.getType());

        if (!result.isSuccess()) {
            throw new IOException("请求失败: " + result.getMessage());
        }

        return result.getData();
    }
}